package com.chuanyun.wechatcheckin;

public class GeoUtils {

    private static final double EARTH_RADIUS = 6371.0; // 地球半径（单位：km）

    /**
     * 计算两组经纬度之间的距离
     * @param lat1 纬度1（单位：度）
     * @param lon1 经度1（单位：度）
     * @param lat2 纬度2（单位：度）
     * @param lon2 经度2（单位：度）
     * @return 距离（单位：米）
     */
    public static double getDistance(double lat1, double lon1, double lat2, double lon2) {
        // 转弧度
        double radLat1 = Math.toRadians(lat1);
        double radLat2 = Math.toRadians(lat2);
        double deltaLat = radLat2 - radLat1;
        double deltaLon = Math.toRadians(lon2 - lon1);

        double a = Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2)
                + Math.cos(radLat1) * Math.cos(radLat2)
                * Math.sin(deltaLon / 2) * Math.sin(deltaLon / 2);
        double c = 2 * Math.asin(Math.sqrt(a));
        double distanceKm = EARTH_RADIUS * c;
        return distanceKm * 1000; // 转换为米
    }

    public static void main(String[] args) {
        double lat1 = 39.909736; // 北京天安门
        double lon1 = 116.397529;
        double lat2 = 31.230416; // 上海市中心
        double lon2 = 121.473701;

        double distance = getDistance(lat1, lon1, lat2, lon2);
        System.out.printf("两地距离：%.2f 米%n", distance);
    }
}
